Add SSH worker support to Symphony Elixir#48
Merged
frantic-openai merged 4 commits intomainfrom Mar 11, 2026
Merged
Conversation
Summary: - add SSH worker execution support, host selection, and remote workspace/app-server wiring for Symphony Elixir - add Docker-backed SSH workers plus explicit local and SSH live E2E coverage in the Elixir test suite - simplify workflow worker config and document the new E2E behavior Rationale: - let Symphony run Codex work on remote SSH hosts without hardcoding host-specific config into the repo - make the live test exercise both the baseline local path and the SSH worker path with disposable infrastructure by default - keep the test and config surface smaller by removing unnecessary normalization and Docker-specific overrides Tests: - make all - env -u SYMPHONY_LIVE_SSH_WORKER_HOSTS LINEAR_API_KEY="$(tr -d '\r\n' < ~/.linear_api_key)" SYMPHONY_RUN_LIVE_E2E=1 mix test test/symphony_elixir/live_e2e_test.exs Co-authored-by: Codex <codex@openai.com>
Summary: - add an optional worker.max_concurrent_agents_per_host setting to the Elixir workflow schema - update orchestrator host selection to skip SSH hosts that are at the shared per-host cap and wait when all SSH hosts are full - cover the new cap in config, scheduler, and spec documentation tests Rationale: - let operators bound concurrent ticket execution per SSH worker machine without introducing per-host bespoke config - keep scheduling behavior predictable by treating saturated SSH hosts as temporarily unavailable instead of falling back to local execution - document the feature lightly in the spec so the extension is visible without overspecifying implementation details Tests: - make all Co-authored-by: Codex <codex@openai.com>
Summary: - add an appendix describing the optional SSH worker extension - clarify the execution model, scheduling notes, and operator concerns - call out failover, workspace locality, and host-capacity behavior Rationale: - document the SSH extension in one place without over-specifying the implementation - make the main operational tradeoffs explicit for readers and operators Tests: - not run (doc-only change) Co-authored-by: Codex <codex@openai.com>
Summary: - keep workspace.root as the configured string instead of expanding it in config parsing - expand local workspace roots only at local sandbox/path use sites and keep ssh roots raw for worker-side ~ resolution - update the ssh workspace tests and live e2e harness to exercise remote roots that begin with ~ - stabilize the orchestrator polling snapshot test under coverage timing Rationale: - preserve the correct ownership boundary for remote path interpretation so ssh workers resolve ~ using their own HOME - avoid carrying duplicate config state such as raw_root when the consumers can handle expansion at the actual boundary - keep make all green while changing the path semantics by tightening the affected tests Tests: - make -C elixir all - cd elixir && env -u SYMPHONY_LIVE_SSH_WORKER_HOSTS LINEAR_API_KEY="$(tr -d '\r\n' < ~/.linear_api_key)" SYMPHONY_RUN_LIVE_E2E=1 mix test test/symphony_elixir/live_e2e_test.exs:128 Co-authored-by: Codex <codex@openai.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
Symphony needs to run tickets on SSH workers, keep the live E2E reliable, and preserve correct remote path semantics.
TL;DR
Add SSH workers, Docker-backed SSH live E2E coverage, per-host caps, and correct worker-side
~resolution.Summary
worker.max_concurrent_agents_per_hostcap and document the SSH extension.workspace.rootraw so SSH workers resolve~on the worker, while local paths expand at local use sites.Alternatives
workspace.rootin config and carry duplicate raw path state, but that complicates the config model.Test Plan
make -C elixir allcd elixir && env -u SYMPHONY_LIVE_SSH_WORKER_HOSTS LINEAR_API_KEY="$(tr -d '\r\n' < ~/.linear_api_key)" SYMPHONY_RUN_LIVE_E2E=1 mix test test/symphony_elixir/live_e2e_test.exs:128